import { useIntervalFn } from "@vueuse/core";
import { ref } from "vue";

export default function useCountDown() {
  // 初始值
  const count = ref(0);
  // 此方法和原生js中的setInterval方法的作用是一样的
  // pause:清除定时器 resume：重新开启定时器 isActive：定时器是否正在执行
  // 要求：定时器不能立即执行 在验证码发送成功以后才执行
  const { pause, resume, isActive } = useIntervalFn(
    () => {
      // 判断是否小于等于零 如果小于
      if (count.value <= 0) {
        // 清除定时器
        pause();
      } else {
        // 如果没有小于0 -1
        count.value = count.value - 1;
      }
    },
    1000,
    {
      // 不立即执行
      immediate: false,
    }
  );
  // 外部调用此方法 用于开始倒计时
  const start = (value) => {
    // 判断定时器是否正在执行 如果没有在执行 可以重新执行定时器
    if (!isActive.value) {
      // 倒计时初始值 传入
      count.value = value;
      // 重新执行定时器
      resume();
    }
  };

  return {
    count,
    start,
    isActive,
  };
}
